package com.sunzhe.cms.tag;

import com.ibeetl.cms.web.query.ArticleQuery;
import com.ibeetl.cms.entity.CmsArticle;
import com.ibeetl.cms.service.CmsArticleService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.beetl.core.tag.GeneralVarTagBinding;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("request") // Tag是每次使用功能都会创建，因此使用prototype
/*
1.singleton单例模式, 全局有且仅有一个实例
2.prototype原型模式， 每次获取Bean的时候会有一个新的实例
3.request　  request表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP request内有效，
4.session　 session作用域表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP session内有效
5.global session  global session作用域类似于标准的HTTP Session作用域，不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念，它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean，那么web会自动当成session类型来使用。
 */
public class ArticleListTag extends GeneralVarTagBinding {

	@Autowired
    CmsArticleService articleService;

	@Override
	public void render() {
		// 标签体上必须有var="" 的属性    var的值代表了对象名称
		ArticleQuery condition = new ArticleQuery();
		String catalogId = String.valueOf(this.getAttributeValue("catalogId"));
		String tagValue = String.valueOf(this.getAttributeValue("tagValue"));
		Boolean top = Boolean.valueOf((String)this.getAttributeValue("top"));
		Object keywordsObj =  this.getAttributeValue("keywords");
		if (keywordsObj != null) {
			condition.setKeywords(String.valueOf(keywordsObj));
		}
		
		String orderby = String.valueOf(this.getAttributeValue("orderby"));
		String pageSize = String.valueOf(this.getAttributeValue("pageSize"));
		String pageNo = String.valueOf(this.getAttributeValue("page"));
		if (StringUtils.isBlank(pageSize)) pageSize = "10";
		if (StringUtils.isBlank(pageNo)) pageNo = "1";

		if (StringUtils.equals("null",catalogId) == false && StringUtils.isNotBlank(catalogId)) {
			condition.setCatalogId(NumberUtils.toLong(catalogId));
		}
		if (StringUtils.equals("null",tagValue) == false && StringUtils.isNotBlank(tagValue)) {
			condition.setTagValue(tagValue);
		}
		if (top != null && top == true) {
			condition.setTop(top);
		}

		String memberId = String.valueOf(this.getAttributeValue("memberId"));
		if (StringUtils.equals("null",memberId) == false && StringUtils.isNotBlank(memberId)) {
			condition.setMemberId(memberId);
		}
		String userId = String.valueOf(this.getAttributeValue("userId"));
		if (StringUtils.equals("null",userId) == false && StringUtils.isNotBlank(userId)) {
			condition.setUserId(userId);
		}

		if (StringUtils.isNotBlank(orderby)) {
			condition.setOrderby(orderby);
		}

		PageQuery<CmsArticle> page = articleService.queryByArticleQuery(condition,NumberUtils.toLong(pageSize),NumberUtils.toLong(pageNo));
		this.binds(page);
		this.doBodyRender();
	}

}
